package testes;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import junit.framework.Assert;

import org.junit.Test;

import bean.Jogador;
import bean.Jogo;
import bean.Palpite;

import util.StatusJogo;

public class JogoTest {
	
	@Test(expected=IllegalArgumentException.class)
	public void testJogoWithNullArguments() throws IllegalArgumentException {
		new Jogo(null, "TimeB", new GregorianCalendar() );
		new Jogo("TimeA", null, new GregorianCalendar() );
		new Jogo("TimeA", "TimeA", new GregorianCalendar() );
		new Jogo("TimeA", "TimeB", null);
	}
	
	@Test
	public void testGetTime() throws Exception {
		Jogo jogo = new Jogo("TimeA", "TimeB", new GregorianCalendar());
		Assert.assertEquals("time diferente" , "TimeA", jogo.getTimeA());
		Assert.assertEquals("time diferente" , "TimeB", jogo.getTimeB());
	}
	
	@Test(expected=IllegalArgumentException.class)
	public void testSetGolAndGetGol() throws Exception {
		Jogo jogo = new Jogo("TimeA", "TimeB", new GregorianCalendar());
		Assert.assertFalse(jogo.setGolsA(-1));
		Assert.assertEquals("gol diferente", 0, jogo.getGolsA());
		Assert.assertTrue(jogo.setGolsA(0));
		Assert.assertTrue(jogo.setGolsB(10));
		Assert.assertEquals("gol diferente", 10, jogo.getGolsB());
	}
	
	@Test
	public void testStatusJogo() throws Exception {
		Jogo jogo = new Jogo("TimeA", "TimeB", new GregorianCalendar());
		Assert.assertEquals("status diferente", StatusJogo.ABERTO ,jogo.getStatusDoJogo());
		jogo.setStatusDoJogo(StatusJogo.FECHADO);
		Assert.assertEquals("status diferente", StatusJogo.FECHADO ,jogo.getStatusDoJogo());
	}
	
	@Test
	public void testPalpites() throws Exception {
		Jogador j1 = new Jogador ("Daniel", "20/05", "Campina Grande", "Brasil", "danielfariasleite@gmail.com", "123456");
		Jogador j2 = new Jogador ("lucas", "20/05", "Campina Grande", "Brasil", "lucas@gmail.com", "123456");
		Palpite p1 = new Palpite(2,0, j1);
		Palpite p2 = new Palpite(2,0, j2);
		Jogo jogo = new Jogo("TimeA", "TimeB", new GregorianCalendar());
		List<Palpite> palpites = new ArrayList<Palpite>();
		jogo.addPalpite(p1);
		palpites.add(p1);
		Assert.assertEquals("palpites diferentes", palpites, jogo.getPalpites());
		jogo.addPalpite(p2);
		palpites.add(p2);
		Assert.assertEquals("palpites diferentes", palpites, jogo.getPalpites());
	}
}
